package main

import (
	"log"

	"backend/api"
	"backend/config"
	"backend/middleware"
	"backend/model"
	"backend/repository"
	"backend/service"

	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	// 加载配置
	cfg := config.LoadConfig()

	// 初始化数据库连接
	db, err := gorm.Open(mysql.Open(cfg.Database.DSN()), &gorm.Config{})
	if err != nil {
		log.Fatalf("数据库连接失败: %v", err)
	}

	// 自动迁移数据表结构
	err = db.AutoMigrate(&model.User{})
	if err != nil {
		log.Fatalf("数据库迁移失败: %v", err)
	}

	// 初始化仓库
	userRepo := repository.NewUserRepository(db)

	// 初始化服务
	authService := service.NewAuthService(userRepo, cfg.JWT.Secret)

	// 初始化API处理器
	authHandler := api.NewAuthHandler(authService)

	// 创建Gin引擎
	r := gin.Default()

	// 配置CORS
	r.Use(middleware.CORSMiddleware())

	// 注册路由
	authHandler.RegisterRoutes(r)

	// 健康检查路由
	r.GET("/health", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"status": "ok",
		})
	})

	// 启动服务器
	log.Printf("服务器启动在端口: %s", cfg.Server.Port)
	if err := r.Run(":" + cfg.Server.Port); err != nil {
		log.Fatalf("服务器启动失败: %v", err)
	}
}
